220 DIM K1$(3) :REM KEYWORD TABLE 250 DIM S3(75) : REM SCREEN VARIABLE FIELD TABLE 280 DIM AH$(500) : REM AUTHOR TABLE 310 REM 340 REM LOAD SCREEN MATRIX'S 370 REM 400 READ A : REM FIGURE OUT HOW MANY SCREEN TABLES 430 FOR M = 0 TO A-1 : I=M*25 : READ S3(I) 460 FOR P = 1TOS3(I) : READ S3(P+I) : NEXT P 490 NEXT M 520 AT = 0 : REM PRIME FOR ONE TIME AUTHOR TABLE LOAD 550 P1$="2":P2$="1":Z$="," 580 GOTO 1870 610 REM 640 REM FIELD FILLING SUBROUTINE 670 REM 700 BT=0:C1=1:R1=0:B$="": REM INITIALIZE BACK TAB, ROW/COLUMN AND BUFFER 730 GOSUB 1300 : REM TAB TO NEXT FIELD 760 GOSUB 1540 : REM READ A CHARACTER 790 IF A$=CHR$(13) THEN B$=B$+" ":GOTO 1180 820 IF A$<> CHR$(20) THEN GOTO 1000: REM CHECK FOR DELETE KEY 850 IF(C1=1 AND R1=0)THEN 760:REM LEAVE ALONE IF AT FIRST POSITION 880 B$=LEFT$(B$,LEN(B$)-1) : REM SHRINK BUFFER BY ONE 910 IF C1=1 THEN R1=R1-1: C1=S3(Q+2):BT=C1-1:GOSUB 1300:GOTO 760 940 C1 = C1 - 1 :BT=C1-1: REM BACK UP ONE POSITION IF IN MIDDLE 970 GOSUB 1300:GOTO 760 : DELETE PREVIOUS EXCEPT AT BEGINNING OF FIELD 1000 B$ = B$ + A$ 1030 C1=C1+1 : REM BUMP COL COUNT 1060 IF C1<= S3(Q+2) GOTO 760 : REM CHECK IF END OF COLUMNS 1090 R1=R1+1:C1=1:BT=0 : REM YES 1120 IF R1< S3(Q+3) THEN GOSUB 1300:GOTO 760 : REM IF NOT LAST ROW TAB 1150 IF R1 < S3(Q+3) THEN 760 : REM END OF ROW/FIELD? IF NOT READ MORE 1180 RETURN 1210 REM 1240 REM TABBING SUBROUTINE 1270 REM 1300 PRINT ""; 1330 PRINT TAB(S3(Q+1)+BT-1); 1360 FOR R3 = 1 TO (S3(Q)-1)+R1:PRINT "";:NEXT R3 1390 PRINT CHR$(18)" [157]"; :REM SPACE FOR BACK TAB 1420 RETURN 1450 REM 1480 REM THE FOLLOWING ARE KEYBOARD READ AND CURSOR BLINK SUBROUTINES 1510 REM 1540 GET A$:IF A$ = "" THEN GOSUB 1720:GOTO 1540 1570 IFA$=","ORA$=";"ORA$=":"THENA$=" " : REM PURGE INPUT DELIMITERS 1600 IF(A$<" " OR A$>"_")AND (A$<> CHR$(13) AND A$<> CHR$(20)) THEN A$=" " 1630 IF A$<>CHR$(13) AND A$<>CHR$(20) THEN PRINT A$;:PS=1 1660 IF F<3 AND PS=1 THEN PRINT "[157]";:PS=0 1690 RETURN 1720 PRINT CHR$(146)" [157]";:FORX=1TO200:NEXT 1750 PRINT CHR$(18)" [157]";:FORX=1TO200:NEXT:RETURN 1780 REM 1810 REM MAIN MENU 1840 REM 1870 F = 1 : REM SET TO FORM ONE 1900 POKE 53280,7:POKE 53281,2 1930 PRINT "";"[147]";"" 1960 PRINT " WELCOME TO PERSONAL LIBRARY MANAGER!" 1990 PRINT "" 2020 PRINT " DO YOU WANT" 2050 PRINT "" 2080 PRINT " TO UPDATE" 2110 PRINT "" 2140 PRINT " OR" 2170 PRINT "" 2200 PRINT " RETRIEVE ABSTRACTS?" 2230 PRINT "" 2260 PRINT " TYPE 'U' - UPDATE" 2290 PRINT " 'R' - RETRIEVE" 2320 PRINT " 'H' - HELP" 2350 PRINT " 'Q' - QUIT" 2380 PRINT "" 2410 PRINT " -->[ ]<--";"[157][157][157][157][157]"; 2440 GOSUB 1540 2470 IF A$ = "Q" THEN LOAD"HELLO CONNECT",8 2500 IF A$ = "R" THEN GOSUB 5770 2530 IF A$ = "U" THEN GOSUB 2740 2560 IF A$ = "H" THEN GOSUB 16300 2590 IF F<> 1 THEN GOTO 1870 2620 GOTO 2440 2650 REM 2680 REM THIS IS THE UPDATE FORM 2710 REM 2740 F = 2 : REM SET TO FORM TWO 2770 POKE 53280,5:POKE 53281,7 2800 PRINT "";"[147]";"" 2830 PRINT " DO YOU WANT TO" 2860 PRINT "" 2890 PRINT " ADD OR DELETE " 2920 PRINT "" 2950 PRINT " ABSTRACTS?" 2980 PRINT "" 3010 PRINT "" 3040 PRINT " TYPE 'A' - ADD" 3070 PRINT " 'D' - DELETE" 3100 PRINT " 'Q' - QUIT" 3130 PRINT "" 3160 PRINT " -->[ ]<--";"[157][157][157][157][157]"; 3190 GOSUB 1540 3220 IF A$ = "Q" THEN RETURN 3250 IF A$ = "A" THEN GOSUB 3460 3280 IF A$ = "D" THEN GOSUB 4840 3310 IF F <> 2 THEN GOTO 2740 3340 GOTO 3190 3370 REM 3400 REM THIS IS THE ADD FORM 3430 REM 3460 F = 3 : REM SET TO FORM THREE 3490 POKE 53280,14:POKE 53281,1 3520 PRINT "";"[147]" 3550 IF SE=0 THEN GOTO 3610 3580 PRINT " RE-ENTER ABSTRACT DATA[146]":GOTO 3640 3610 PRINT " ADD AN ABSTRACT" 3640 PRINT " ABSTRACT TITLE -  [146]" 3670 PRINT TAB(19)" [146]" 3700 PRINT " AUTHOR -  [146]" 3730 PRINT " DOCUMENT TITLE -  [146]" 3760 PRINT " ABSTRACT DATE -  [146]" 3790 PRINT " ABSTRACT -  [146]" 3820 PRINT TAB(19)" [146]" 3850 PRINT TAB(19)" [146]" 3880 PRINT TAB(19)" [146]" 3910 PRINT " TYPE 'RETURN' - TAB" 3940 PRINT " 'P' - PROCESS" 3970 PRINT " 'Q' - QUIT" 4000 PRINT " -->[ ]<--" 4030 Q=1: REM INITIALIZE FIELD POINTER 4060 GOSUB 700:REM - 1ST FIELD 4090 F1$=B$ 4120 Q=1+(1*4) 4150 GOSUB 700:REM - 2ND FIELD 4180 F2$=B$ 4210 Q=1+(2*4) 4240 GOSUB 700:REM - 3RD FIELD 4270 F3$=B$ 4300 Q=1+(3*4) 4330 GOSUB 700:REM - 4TH FIELD 4360 F4$=B$ 4390 Q=1+(4*4) 4420 GOSUB 700:REM - 5TH FIELD 4450 F5$=B$ 4480 Q=1+(5*4) 4510 GOSUB 700 : REM - ACTION FIELD 4540 SE=1 4570 IF A$=CHR$(13) THEN PRINT CHR$(146)" ";:GOTO 3520 4600 SE=0 4630 IF A$ = "P" THEN GOSUB 9460 4660 IF A$ = "Q" THEN RETURN 4690 IF F<> 3 THEN GOTO 3460 4720 GOTO 4480 4750 REM 4780 REM THIS IS THE DELETE FORM 4810 REM 4840 F = 5 : REM SET TO FORM FIVE 4870 POKE 53280,8:POKE 53281,3 4900 PRINT "";"[147]" 4930 PRINT "" 4960 IF SE=0 THEN GOTO 5020 4990 PRINT " [144] RE-ENTER DELETE DATA[146]":GOTO 5050 5020 PRINT " DELETE AN ABSTRACT" 5050 PRINT "" 5080 PRINT " ABSTRACT TITLE -  [146]" 5110 PRINT TAB(19)" [146]" 5140 PRINT "" 5170 PRINT " TYPE 'RETURN' - TAB" 5200 PRINT " 'P' - PROCESS" 5230 PRINT " 'Q' - QUIT" 5260 PRINT "" 5290 PRINT " -->[ ]<--" 5320 Q=26: REM INITIALIZE FIELD POINTER 5350 GOSUB 700:REM - 1ST FIELD 5380 F1$=B$ 5410 Q=26+(1*4) 5440 GOSUB 700 : REM - ACTION FIELD 5470 SE=1 5500 IF A$=CHR$(13) THEN PRINT CHR$(146)" ";:GOTO 4900 5530 SE=0 5560 IF A$ = "P" THEN GOSUB 14470 5590 IF A$ = "Q" THEN RETURN 5620 IF F<> 5 THEN GOTO 4840 5650 GOTO 5410 5680 REM 5710 REM THIS IS THE RETRIEVE FORM 5740 REM 5770 F = 6 : REM SET TO FORM SIX 5800 POKE 53280,5:POKE 53281,1 5830 PRINT "";"[147]";"" 5860 IF SE=0 THEN GOTO 5920 5890 PRINT " RE-ENTER RETRIEVE DATA[146]":GOTO 5950 5920 PRINT " RETRIEVE AN ABSTRACT" 5950 PRINT " ENTER ABSTRACT TITLE, AUTHOR'S NAME," 5980 PRINT " BOTH, OR '*' IN AUTHOR FIELD (TO SEE" 6010 PRINT " ALL AUTHORS AND THEIR ABSTRACTS)." 6040 PRINT " ENTER UP TO THREE KEYWORDS AND A '$' " 6070 PRINT " IN AUTHOR FOR KEYWORD SEARCH." 6100 PRINT " TITLE/KEYWORDS -  [146]" 6130 PRINT TAB(19)" [146]" 6160 PRINT " AUTHOR/*/$/ -  [146]" 6190 PRINT "" 6220 PRINT " TYPE 'RETURN' - TAB" 6250 PRINT " 'P' - PRINT" 6280 PRINT " 'V' - VIEW" 6310 PRINT " 'Q' - QUIT" 6340 PRINT " -->[ ]<--" 6370 Q=51 6400 GOSUB 700 : REM GET 1ST FIELD 6430 F1$=B$ 6460 Q=51+(1*4) 6490 GOSUB 700 : REM GET 2ND FIELD 6520 F2$=B$ 6550 Q=51+(2*4) 6580 GOSUB 700 : REM GET ACTION FIELD 6610 SE=1 6640 IF A$=CHR$(13) THEN PRINT CHR$(146)" ";: GOTO 5830 6670 SE=0 6700 IF A$ = "P" OR A$ = "V" THEN GOSUB 12250 6730 IF A$ = "Q" THEN RETURN 6760 IF F<> 6 THEN GOTO 5770 6790 GOTO 6550 6820 REM 6850 REM BELOW ARE TABLES FOR MANAGING THE VARIABLE FIELDS OF THE FORMS. 6880 REM EACH TABLE CONTAINS THE 6910 REM COUNT OF ITEMS IN THE DATA LIST, IN SETS OF FOUR, COMPOSED OF 6940 REM START ROW/COLUMN, LENGTH AND DEPTH OF FIELD. 6970 REM 7000 DATA 3 : REM NUMBER OF SCREEN TABLES 7030 DATA 24,5,20,20,2,8,20,20,1,10,20,20,1,12,20,20,1,14,20,20,4,24 7060 DATA 18,1,1,8,12,20,20,2,23,18,1,1 7090 DATA 12,12,20,20,2,15,20,20,1,23,18,1,1 7120 REM 7150 REM AUTHOR TABLE FULL/EMPTY CHECKING AND FILLING ROUTINE 7180 REM 7210 IF AH$(1) <> "" THEN GOTO 7330 : REM IF TABLE IS NOT EMPTY, JUMP 7240 AT = VAL(P2$) 7270 FOR X = 1 TO AT 7300 INPUT#3, AH$(X): NEXT 7330 RETURN 7360 REM 7390 REM CONVERT RECORD POINTER TO BINARY 7420 REM 7450 R1=VAL(P1$):R2=0: IF R>256THEN R2=INT(R1/256):R1=R1-256*R2 7480 RETURN 7510 REM 7540 REM THIS ROUTINE BUMPS "AT", THE AUTHOR TABLE POINTER 7570 REM AND PUTS THE AUTHOR AND THE POINTER "PF$" IN THE TABLE 7600 REM 7630 AH$(AT) = F2$: AT = AT + 1 7660 AH$(AT) = PF$: AT = AT + 1: AH$(AT) = "ZZZ" 7690 RETURN 7720 REM 7750 REM DISK ERROR PRINT ROUITNE 7780 REM 7810 PRINT""; 7840 PRINT B$;"-'RETURN' TO ABORT ";"[157][157]"; 7870 GOSUB 1540 7900 IF A$>=CHR$(32) AND A$<=CHR$(95) THEN PRINT "[157]";:GOTO 7870 7930 IF A$<>CHR$(13) THEN GOTO 7870 7960 CLOSE2:CLOSE3:CLOSE1:F=0:RETURN 7990 REM 8020 REM DISK ERR CHNL READ ROUTINE 8050 REM 8080 INPUT#1,A,B$,C,D 8110 RETURN 8140 REM 8170 REM GARBAGE COLLECTION ROUTINE 8200 REM 8230 F1$="":F2$="":F3$="":F4$="":F5$="":U1$="":U2$="":U3$="":U4$="":U5$="" 8260 K1$(1)="":K1$(2)="":K1$(3)="":P1$="":P2$="":A$="":B$="" 8270 M=FRE(0):RETURN 8290 REM 8320 REM THIS ROUITNE BUMPS THE TEMP ABSTRACT PTR BY 1 8350 REM CONVERTS IT TO BINARY AND DOES A SEEK OF THE ABSTRACT FILE 8380 REM 8410 TR=TR+1:P1$=STR$(TR):GOSUB 7450 8440 PRINT#1,"P" CHR$(2)CHR$(R1)CHR$(R2)CHR$(1):RETURN 8470 REM 8500 REM GET THREE KEYWORDS FROM SCREEN AND PUT IN TABLE 8530 REM 8560 K1$(1)="":K1$(2)="":K1$(3)="" 8590 KX=LEN(F1$):KL=1 8620 FOR KC = 1 TO 3 8650 FOR KZ = KL TO KX 8680 IF MID$(F1$,KZ,1) <> " " THEN GOTO 8800 8710 IF KZ=1 THEN RETURN 8740 K1$(KC) = MID$(F1$,KL,(KZ-KL)) 8770 KL = KZ+1 : GOTO 8830 8800 NEXT KZ 8830 NEXT KC 8860 RETURN 8890 REM 8920 REM KEYWORD SEARCH ROUTINE 8950 REM 8980 KL=1:SW=0 9010 KX=LEN(U5$) 9040 FOR KZ=KL TO KX 9070 IF MID$(U5$,KZ,1) <> " " THEN GOTO 9310 9100 FOR KQ=1TO3 9130 IF K1$(KQ)<>MID$(U5$,KL,(KZ-KL)) THEN GOTO 9250 9160 M1$="":M2$="[146]" 9170 U5$=LEFT$(U5$,KL-1)+M1$+MID$(U5$,KL,(KZ-KL))+M2$+MID$(U5$,KZ,(KX-KZ)) 9190 KZ=KZ+4:KX=KX+4:SW=1 9220 GOTO 9280 9250 NEXT KQ 9280 KL=KZ+1 9310 NEXT KZ 9340 RETURN 9370 REM ***************************** 9400 REM * ABSTRACT FILE ADD ROUTINE * 9430 REM ***************************** 9460 IF LEFT$(F1$,1)=" " OR LEFT$(F2$,1)=" " THEN F=0: RETURN 9490 OPEN 1,8,15 : REM OPEN COMMAND CHANNEL 9520 OPEN 2,8,2,"ABSTRACTS" 9550 GOSUB 7990 9580 IF A<20 THEN GOTO 9940 : REM IF FILE IS HERE, O.K. 9610 IF A=62 THEN GOTO 9760 : REM FILE ABSENT, GO CREATE IT 9640 GOSUB 7810:RETURN 9670 REM 9700 REM IT DID NOT EXIST, SO CREATE IT THE FIRST TIME 9730 REM 9760 CLOSE2: OPEN 2,8,2, "ABSTRACTS,L,"+CHR$(83) 9790 GOSUB 7990:IF A<20 THEN GOTO 10240 9820 GOSUB 7810:RETURN 9850 REM 9880 REM GET POINTER RECORD 9910 REM 9940 PRINT#1,"P" CHR$(2)CHR$(1)CHR$(0)CHR$(1) 9970 GOSUB 7990 10000 IF A < 20 THEN INPUT#2,P1$,P2$: GOTO 1024 0: REM GET POINTERS 10030 GOSUB 7810:RETURN : REM BAD RETURN 10060 REM 10090 REM WE HAVE TO STORE AND RETRIEVE ABSTRACT IN THREE PARTS. 10120 REM 1ST IS A RECORD WITH TITLE, AUTHOR, MAGAZINE TITLE. 10150 REM 2ND IS MAGAZINE DATE. 3RD IS ABSTRCT ONLY. 10170 REM WE DO THIS TO GET AROUND THE 88 CHARACTER LIMIT 10180 REM OF THE INPUT STATEMENT. 10210 REM 10240 GOSUB 7450 : REM CONVERT POINTER P1$ 10270 TR = VAL(P1$) 10300 PRINT#1,"P" CHR$(2)CHR$(R1)CHR$(R2)CHR$(1) 10330 GOSUB 7990: IF A<20 OR A=50 THEN GOTO 10390 10360 GOSUB 7810:RETURN 10390 PRINT#2,F1$Z$F2$Z$F3$ : REM WRITE TITLE AUTHOR AND MAGAZINE TITLE 10420 PF$=P1$ : REM SET PTR FOR AUTHOR TABLE PLUG 10450 GOSUB 8410 : REM DATE 10480 GOSUB 7990: IF A<20 OR A=50 THEN GOTO 10540 10510 GOSUB 7810:RETURN 10540 PRINT#2, F4$ : REM WRITE MAGAZINE DATE 10570 GOSUB 8410 : REM ABSTRACT 10600 GOSUB 7990 : IF A<20 OR A=50 THEN GOTO 10660 10630 GOSUB 7810:RETURN 10660 PRINT#2,F5$ : REM FINALLY WRITE ABSTRACT!!! 10690 REM 10720 REM NOW LOAD AND UPDATE THE AUTHOR TABLE 10750 REM 10780 OPEN 3,8,3,"0:AUTHORS,S,R" 10810 GOSUB 7990 : REM IS TABLE THERE? 10840 IF A = 62 THEN:CLOSE3:OPEN 3,8,3,"0:AUTHORS,S,W":GOTO 10990 10870 GOTO 11260 10900 REM 10930 REM THIS IS THE FIRST TIME AUTHOR BLOCK FILLING ROUTINE 10960 REM 10990 AT = VAL(P2$) 11020 GOSUB 7630 :REM GO BUMP TABLE POINTERS 11050 FOR X = 1 TO AT 11080 PRINT#3,AH$(X): NEXT 11110 GOSUB 7990 : IF A > 20 THEN GOSUB 7810 : PRINT#1,"S0:AUTHORS":RETURN 11140 GOTO 11890 11170 REM 11200 REM THIS IS THE AUTHOR TABLE FILL AND UPDATE ROUTINE 11230 REM 11260 GOSUB 7210 : REM GO SEE IF AUTHOR TABLE IS FULL, IF NOT, FILL IT 11290 CLOSE3 11320 IF AT=500 THEN B$="AUTHOR TABLE FULL ":GOSUB 7810:RETURN 11350 REM 11380 REM NOW FIND A SPOT IN THE TABLE 11410 REM 11440 OPEN 3,8,3, "@0:AUTHORS,S,W" 11470 GOSUB 7990: IF A > 20 THEN GOSUB 7810 : RETURN 11500 REM 11530 REM LOOK FOR AUTHOR, IF HIT, FIND END OF POINTERS, SHIFT EVERYTHING 11560 REM RIGHT ONE SLOT, IF NO HIT, THEN STICK AT END OF TABLE 11590 REM 11620 FOR Y = 1 TO AT 11650 IF F2$ = AH$(Y) THEN Y=Y+1:GOTO 11740:REM IF TABLE END, FALL THROUGH 11680 NEXT 11710 GOSUB 7630 : GOTO 11830 11740 FOR X = (AT+1) TO Y STEP -1 : REM SHIFT STUFF 11770 AH$(X) = AH$(X-1): NEXT : REM RIGHT ONE SLOT 11800 AH$(Y) = PF$: AT = AT +1 11830 FOR X = 1 TO AT 11860 PRINT#3, AH$(X): NEXT 11890 REM 11920 REM NOW UPDATE P1 AND P2 , WRITE THEM BACK AND RETURN 11950 REM 11980 PRINT#1, "P"CHR$(2)CHR$(1)CHR$(0)CHR$(1) 12010 TR = TR + 1 : P1$ = STR$(TR) : P2$ = STR$(AT) 12040 PRINT#2,P1$Z$P2$ 12070 GOSUB 7990:IF A>20 THEN GOSUB 7810 12100 GOSUB 8230 : REM DO GARBAGE COLLECTION 12130 F = 0:CLOSE2:CLOSE3:CLOSE1:RETURN 12160 REM ***************************** 12190 REM * ABSTRACT RETRIEVE ROUTINE * 12220 REM ***************************** 12250 OPEN1,8,15 12280 OPEN 2,8,2,"ABSTRACTS" 12310 GOSUB 7990 12340 IF A > 20 THEN GOSUB 7810:RETURN 12370 OPEN 3,8,3,"0:AUTHORS,S,R" 12400 GOSUB 7990 12430 IF A > 20 THEN GOSUB 7810:RETURN 12460 C$=A$ 12490 CD=1 : REM AUTHOR ONLY RETRIEVE 12520 IF F1$ = " " AND F2$ = " " THEN GOTO 14320 12550 IF F1$ <> " " AND F2$ <> " " THEN CD = 2 : REM MAKE SAME AS CODE TWO 12580 IF LEFT$(F2$,1) = "$" THEN CD = 3 : GOSUB 8560 : REM KEYWORD SEARCH 12610 IF F1$ <> " " AND F2$ = " " THEN CD = 2 : REM ABSTRACT ONLY RETRIEVE 12640 PRINT#1,"P" CHR$(2)CHR$(1)CHR$(0)CHR$(1) 12670 GOSUB 7990 12700 IF A >20 THEN GOSUB 7810:RETURN 12730 INPUT#2,P1$,P2$ 12760 GOSUB 7210 :REM CHECK/FILL AUTHOR TABLE 12790 REM 12820 REM THIS IS THE AUTHOR TABLE HUNT ROUTINE 12850 REM 12880 IF LEFT$(F2$,1)="*" OR CD=3 OR CD=2 THEN X=1:Z=1:GOTO 13120 12910 FOR X = 1 TO (AT-1) 12940 IF F2$ = AH$(X) THEN X = X + 1:GOTO 13120 12970 NEXT 13000 GOTO 14350 : REM NO HIT, RETURN TO MENU 13030 REM 13060 REM NOW GO TO THE ABSTRACT FILE AND GET DATA AND PRINT 13090 REM 13120 FOR Y = X TO (AT-1) 13150 P1$ = AH$(Y) 13180 IF LEFT$(P1$,1)>"@" AND Z=1THEN 14290 :REM PRNT ALL - SKIP NAMES 13210 IF LEFT$(P1$,1)>"@" THEN 14350: REM JUMP IF END OF AUTHOR POINTERS 13240 GOSUB 7450 13270 TR = VAL(P1$) 13300 PRINT#1,"P" CHR$(2)CHR$(R1)CHR$(R2)CHR$(1) 13330 GOSUB 7990:IF A > 20 THEN GOSUB 7810:RETURN 13360 INPUT#2,U1$,U2$,U3$ : REM GET TITLE AUTHOR AND MAGAZINE TITLE 13390 GOSUB 8410 13420 IF A>20 THEN GOSUB 7810:RETURN 13450 INPUT#2,U4$ : REM GET DATE 13480 GOSUB 8410 13510 IF A>20 THEN GOSUB 7810:RETURN 13540 INPUT#2,U5$ : REM GET ABSTRACT 13570 IF CD=3 THEN GOSUB 8980 13600 IF SW <> 1 AND CD = 3 GOTO 14290 : REM NO KEYWORD HIT 13630 IF CD=2 AND U1$<>F1$ THEN 14290: REM DOES ABSTRACT MATCH? JMP IF NO 13660 IF C$ <> "V" THEN GOTO 14020 13690 PRINT "[147][146]"; 13720 PRINT "ABSTRACT TITLE[146]":PRINT U1$ 13750 PRINT "AUTHOR[146]":PRINT U2$ 13780 PRINT "DOCUMENT TITLE[146]":PRINT U3$ 13810 PRINT "ABSTRACT DATE[146]":PRINT U4$ 13840 PRINT "ABSTRACT[146]":PRINT U5$ 13870 PRINT "MORE - Y/N - ";:GOSUB1540 13900 IF A$="N" THEN GOTO 14350 13930 IF A$ <> "Y" THEN PRINT "[145]":GOTO 13870 13960 IF CD=2 THEN GOTO 14320 13990 GOTO 14290 14020 OPEN4,4 14050 PRINT#4,"ABSTRACT TITLE - ";U1$,CHR$(10) 14080 PRINT#4,"AUTHOR - ";U2$,CHR$(10) 14110 PRINT#4,"DOCUMENT TITLE - ";U3$,CHR$(10) 14140 PRINT#4,"ABSTRACT DATE - ";U4$,CHR$(10) 14170 PRINT#4,CHR$(16) "36ABSTRACT",CHR$(10),CHR$(10) 14200 PRINT#4,U5$,CHR$(10),CHR$(10),CHR$(10) 14230 CLOSE4 14260 IF CD=2 THEN GOTO 14320 14290 NEXT 14320 GOSUB 8230 : REM DO GARBAGE COLLECTION 14350 F=0: Z=0: SW=0 : CLOSE2:CLOSE3:CLOSE1:RETURN 14380 REM ****************************** 14410 REM * THIS IS THE DELETE ROUTINE * 14440 REM ****************************** 14470 IF LEFT$(F1$,1) = " " THEN F=0: RETURN 14500 OPEN 1,8,15 14530 OPEN 2,8,2,"ABSTRACTS" 14560 GOSUB 7990 14590 IF A>20 THEN GOSUB 7810:RETURN 14620 OPEN3,8,3,"@0:AUTHORS,S,W" 14650 IF A>20 THEN GOSUB 7810:RETURN 14680 PRINT#1,"P" CHR$(2)CHR$(1)CHR$(0)CHR$(1) 14710 GOSUB 7990 14740 IF A>20 THEN GOSUB 7810:RETURN 14770 INPUT#2,P1$,P2$ 14800 REM 14830 REM NOW RETRIEVE ALL ABSTRACTS UNTIL THE END OR HIT; IF NO HIT EXIT. 14860 REM IF HIT, MARK ABSTRACT TITLE WITH HIGH VALUE. THEN GO READ 14890 REM AUTHOR TABLE AND SHRINK TABLE WHERE POINTER IS TO ABSTRACT FILE. 14920 REM 14950 AB = VAL(P1$) 14980 FOR X = 2 TO (AB-3) STEP 3 15010 T1$ = STR$(X):P1$=RIGHT$(T1$,LEN(T1$)-1) 15040 GOSUB 7450 15070 PRINT#1,"P" CHR$(2)CHR$(R1)CHR$(R2)CHR$(1) 15100 GOSUB 7990:IF A>20 THEN GOSUB 7810:RETURN 15130 INPUT#2,U1$,U2$,U3$ 15160 IF F1$<>U1$ THEN GOTO 15340 15190 F2$ = U2$ : U1$ = CHR$(255) : REM MARK DELETED!!!! 15220 PRINT#1,"P" CHR$(2)CHR$(R1)CHR$(R2)CHR$(1) 15250 GOSUB 7990:IF A>20 THEN GOSUB 7810:RETURN 15280 PRINT#2,U1$Z$U2$Z$U3$ 15310 GOTO 15400 15340 NEXT 15370 GOTO 16150 : REM NO HIT, EXIT 15400 GOSUB 7210 : REM CHECK/FILL AUTHOR TABLE 15430 REM 15460 REM FIND AUTHOR 15490 REM 15520 FOR X = 1 TO (AT-1) 15550 IF F2$ = AH$(X) THEN X = X + 1 : GOTO 15640 15580 NEXT 15610 GOTO 16150 : REM NO HIT, EXIT 15640 FOR Y = X TO (AT-1) 15670 IF LEFT$(AH$(Y),1)>"@" THEN 16150 : REM NO HIT FOR SOME REASON 15700 IF AH$(Y) = P1$ THEN GOTO 15760 15730 NEXT 15760 FOR Q = Y TO (AT-1) : REM SHIFT TABLE 15790 AH$(Q) = AH$(Q+1) : REM LEFT ONE 15820 NEXT 15850 AT = AT -1 15880 FOR X = 1 TO AT 15910 PRINT#3,AH$(X):NEXT 15940 REM 15970 REM NOW UPDATE P2$ AND WRITE IT BACK TO FILE 16000 REM 16030 PRINT#1,"P" CHR$(2)CHR$(1)CHR$(0)CHR$(1) 16060 P2$ = STR$(AT):P1$=STR$(AB) 16090 PRINT#2,P1$Z$P2$ 16120 GOSUB 7990: IF A>20 THEN GOSUB 7810 16150 GOSUB 8230 : REM DO GARBAGE COLLECTION 16180 F=0: CLOSE2:CLOSE3:CLOSE1:RETURN 16210 REM **************** 16240 REM * HELP ROUTINE * 16270 REM **************** 16300 POKE 53280,0:POKE 53281,5 16330 PRINT "[144]" 16360 PRINT "[147]" 16390 PRINT " PERSONAL LIBRARY MANAGER IS USED FOR" 16420 PRINT " STORING, RETRIEVING, AND DELETING" 16450 PRINT " INFORMATION (IE. ABSTRACTS) ON DOCU-" 16480 PRINT " MENTS IN A DATA BASE. MINIMUN EQUIP-" 16510 PRINT " MENT AND SOFTWARE REQUIREMENTS ARE:" 16540 PRINT " - C64 COMMODORE COMPUTER," 16570 PRINT " - C1541 DISK DRIVE, OR COMPATABILE " 16600 PRINT " UNIT," 16630 PRINT " - VIDEO MONITOR," 16660 PRINT " - AND ROM BASIC." 16690 PRINT " OPTIONAL EQUIPMENT IS AN MPS 801 " 16720 PRINT " PRINTER OR COMPATABILE UNIT." 16750 PRINT " CONTINUE - Y/N - ";:GOSUB 1540 16780 IF A$="N" THEN F=0:RETURN 16810 IF A$<>"Y" THEN PRINT "[145][145]":GOTO 16750 16840 PRINT "[147]" 16870 PRINT " TO USE THIS PROGRAM, SIMPLY FILL IN" 16900 PRINT " THE BLANKS ON THE VARIOUS SCREEN FORMS" 16930 PRINT " AND GIVE THE FORM THE APPROPRIATE" 16960 PRINT " COMMAND. HERE ARE SOME HINTS FOR" 16990 PRINT " USING THE FORM COMMANDS:" 17020 PRINT " - 'Q'UIT ALWAYS RETURNS TO THE PRE-" 17050 PRINT " VIOUS FORM; AT THE GREETING FORM" 17080 PRINT " IT DOES A KERNAL COLD START," 17110 PRINT " - 'P'ROCESS MAKES THE DESIRED ACTION" 17140 PRINT " TAKE PLACE," 17170 PRINT " - 'V'IEW SHOWS ON THE MONITOR ONLY," 17200 PRINT " - 'P'RINT SHOWS ON THE PRINTER ONLY," 17230 PRINT " - 'RETURN' MOVES THE CURSOR TO THE" 17260 PRINT " NEXT FIELD AND PLACES YOUR DATA" 17290 PRINT " INTO THE DISK BUFFER. AT THE " 17320 PRINT " ACTION FIELD, IT MOVES THE CUR-" 17350 PRINT " SOR BACK TO THE FIRST DATA FIELD," 17380 PRINT " - 'DEL' DELETES THE LAST CHARACTER," 17410 PRINT " - AND FINALLY, CHANGING AN ABSTRACT" 17440 PRINT " CAN BE EFFECTED BY DELETING THEN" 17470 PRINT " ADDING THE DESIRED DOCUMENT." 17500 PRINT " CONTINUE - Y/N - ";:GOSUB 1540 17530 IF A$="N" THEN F=0:RETURN 17560 IF A$<>"Y" THEN PRINT "[145][145]":GOTO 17500 17590 GOTO 16360 17950 END